Detta avsnitt innehåller en genomgång av funktionerna i och konventionerna för XML och är avsedd att användas som snabbreferens.
XML-dokumentets olika delar
Ett XML-dokument består av följande delar i den här ordningen:
XML-deklaration
Om en XML-deklaration inkluderas måste den vara första raden i ett XML-dokument. Den indikerar vilken version av XML som dokumentet följer och huruvida filen inkluderar anrop till andra filer. Exempel:
<?xml version="1.0" standalone="no"?>DOCTYPE-deklaration (inklusive DTD)
DOCTYPE-deklarationen som anger dokumentets DTD placeras efter XML-deklarationen och före startformatkoden i rotelementet. Det finns två möjliga delar i alla DTDer: den externa delmängden och den interna delmängden. Om ett dokument bara har en extern delmängd ser det ut så här:
<?xml version="1.0" standalone="no">Om ett dokument bara har en intern delmängd ser det ut så här:
<?xml version="1.0" standalone="yes">Om ett dokument har både en extern delmängd och en intern delmängd ser det ut så här:
<?xml version="1.0" standalone="no">Element
Ett element består av en startformatkod (<kodnamn>), en del innehåll och en slutformatkod (</kodnamn>):
<kodnamn>Innehållet placeras här.</kodnamn>Ett undantag är den tomma formatkoden som kan vara en enda formatkod med ett snedstreck (/) före den avslutande >:
<tomKod/>Alla element måste inkapslas rätt, vilket betyder att den senast öppnade formatkoden måste stängas innan du kan stänga några andra formatkoder. Följande rad skulle t ex vara illegal i ett XML-dokument eftersom den inte stänger <kod2> innan den stänger <kod1>:
<kod1><kod2>Innehållet placeras här.</kod1></kod2>Varje XML-dokument måste ha ett rotelement som innehåller alla de andra elementen i dokumentet.
Elementnamn skiljer mellan versaler och gemener. Varje elementnamn måste inledas med en bokstav eller understrykning (_); efterföljande tecken i namnet kan vara bokstäver, understrykningstecken, siffror, bindestreck och punkter, men inte blanksteg eller tabbar.
Attribut
Element kan ha attribut som en del av sin startformatkod (eller, för tomma element, som en del av den enda start/slut-formatkoden). Ett attribut består av ett attributnamn följt av ett likhetstecken och sedan ett attributvärde inom citationstecken. Exempel:
<elementnamn attributnamn="attributvärde">Innehåll</elementnamn>Kommentarer
En kommentar består av text mellan <!-- och -->. Innehållet i kommentarer bör ignoreras av XML-behandlare. Kommentarer får inte innehålla "--" och de får inte innehålla andra kommentarer.
<!-- Detta är en kommentar. Tecken såsom < och > är tillåtna här. -->Behandlingsinstruktioner
En behandlingsinstruktion består av text mellan <? och ?>. Behandlingsinstruktioner läses bara av XML-behandlare och får inte bestå av innehåll. Syntaxen för behandlingsinstruktioner är som följer:
<?målinstruktion?>Teckenanrop
Ett teckenanrop är ett sätt att representera Unicode-tecken i analyserade teckendata. Syntaxen för teckenanrop är som följer:
&#UnicodeTeckenvärde;Entitetsanrop
Ett entitetsanrop är ett namn som representerar ett specifikt tecken, textsträng eller fil. Entitetsanrop i ett XML-dokument finns alltid mellan ett &-tecken och ett semikolon (;). Exempel: > representerar ett större än-tecken (<), som inte får inkluderas i XML-innehåll förutom som ett entitetsanrop.
Innebörden av varje entitetsanrop som används i ett XML-dokument måste definieras i dokumentets DTD, med undantag av följande fördefinierade teckenentitetsanrop, som får användas utan att vara definierade:
Tecken | Entitetsanrop |
< | < |
> | > |
& | & |
" | " |
' | ' |
Välutformat XML-dokument
Innan ett XML-dokument är välutformat måste det följa nedanstående regler:
Giltigt XML-dokument
Ett giltigt XML-dokument är ett XML-dokument som är välutformat och följer den DTD som anges av tillhörande DOCTYPE-deklaration.
Detta avsnitt innehåller en genomgång av funktionerna i och konventionerna för DTDer som du kan använda som snabbreferens.
De olika delarna i en DTD
En DTD kan sammanställas av följande delar, utan någon särskild ordningsföljd:
Elementtypsdeklarationer
Syntaxen för en elementtypsdefinition är som följer:
<!ELEMENT elementnamn (elementinnehåll)>Elementnamn skiljer mellan versaler och gemener. Varje elementnamn måste börja med en bokstav eller en understrykning (_); efterföljande tecken i namnet får vara bokstäver, understrykningar, siffror, bindestreck och punkter, men inte blanksteg eller tabulatorer.
Elementinnehåll får bestå av analyserade teckendata (dvs text och entitetsanrop, uttryckta som ) och/eller andra elementtyper. Följande symboler får infogas efter valfritt elementnamn eller avslutande parentes i elementinnehållsdefinitionen:
Symbol | Innebörd |
Ingen | Exakt ett |
+ | Ett eller fler |
* | Noll eller fler |
? | Noll eller ett |
Använd ett komma om du vill att ett element ska följas av ett annat:
<!ELEMENT elementnamn (element1, element2)>Använd ett | för att indikera att innehållet kan inkludera ett element eller ett annat:
<!ELEMENT elementnamn (element1 | element2)>Använd följande syntax om du vill tillåta att ett element kan innehålla en kombination av specifika element och #PCDATA i valfri ordning:
<!ELEMENT elementnamn (#PCDATA | element1 | element2)*>Använd följande syntax (observera att parentesen utelämnas) om du vill tillåta att ett element kan innehålla en valfri kombination av element och #PCDATA i valfri ordning:
<!ELEMENT elementnamn ANY>Använd följande syntax (observera att parentheses utelämnas) om du vill definiera ett tomt element:
<!ELEMENT elementNamn EMPTY>Attributdeklarationer
Syntaxen för en enkel attributdefinition är som följer:
<!ATTLIST elementnamn attributnamn attributtyp standardvärde>Attributnamn skiljer mellan versaler och gemener. Varje attributnamn måste börja med en bokstav eller understrykning (_). De efterföljande tecknen i namnet får vara bokstäver, understrykningar, siffror, bindestreck och punkter, men inte blanksteg eller tabulatorer.
Attributtyper kan se ut så här:
Attributtyp | Innebörd |
CDATA | Teckendata och entitetsanrop, mellan citationstecken ("") |
ID | Måste innehålla ett unikt namn* för varje element av den här typen |
IDREF | Det unika ID-namnet* för ett element i XML-filen |
ENTITY | Ett icke analyserat externt entitetsanropsnamn* som definierats i DTD |
ENTITIES | En lista med ENTITY-namn, åtskilda med blanksteg |
Uppräkning | En lista inom parentes, med namn*, åtskilda med |-tecken |
NMTOKEN | Ett värde som bara innehåller NameChar-tecken** |
NMTOKENS | En lista med NMTOKEN, åtskilda med blanksteg |
NOTATION | Namnet på en notation som definierats i DTD |
Uppräknings-NOTATION | En lista inom parentes med NOTATION, åtskilda med |-tecken |
*Namn måste börja med en bokstav eller understrykning (_). De efterföljande tecknen i namnet får vara bokstäver, understrykningar, siffror, bindestreck och punkter, men inte blanksteg eller tabulatorer.
**NameChar-tecken inkluderar bokstäver, understrykningar, siffror, bindestreck eller punkter, men inte blanksteg eller tabulatorer.
Standardattributvärden kan vara följande:
Attributtyp | Innebörd | |
#REQUIRED | (Obligatoriskt) Detta attribut måste anges av elementet | |
#IMPLIED | (Underförstått) Detta attribut kan, men behöver inte, användas | |
#FIXED värde | (Låst) Om detta attribut inte anges, förutsätts det att det är värde; om | det anges måste det vara värde |
standardvärde | Om detta attribut inte anges, förutsätts det att det är standardvärde |
Kommentarer
En kommentar består av texten mellan en <!-- och en -->. Innehållet i kommentarer bör ignoreras av XML-behandlare. Kommentarer får inte innehålla "--" och de får inte heller innehålla andra kommentarer.
<!-- Detta är en kommentar. Tecken såsom < och > tillåtes här. -->Teckenreferenser
En teckenreferens är ett sätt att representera Unicode-tecken i analyserade teckendata. Syntaxen för teckenreferenser är enligt följande:
&#UnicodeTeckenvärde;entitetsreferensdeklarationer
Det finns fem entitetstyper. Syntaxen för deras deklaration är enligt följande:
Typ | Syntax |
Analyserad intern | <!ENTITY entitetsnamn "text i entitet"> |
Analyserad extern | <!ENTITY entitetsnamn SYSTEM "URL för fil"> ELLER <!ENTITY entitetsnamn PUBLIC "filnamn" "URL för fil"> |
Icke analyserad extern | <!ENTITY entitetsnamn SYSTEM "URL för fil" NDATA notationsnamn> ELLER <!ENTITY entitetsnamn PUBLIC "filnamn" "URL för fil" NDATA notationsnamn> |
Intern parameter | <!ENTITY % entitetsnamn "text i entitet"> |
Extern parameter | <!ENTITY % entitetsnamn SYSTEM "URL för fil"> ELLER <!ENTITY % entitetsnamn PUBLIC "filnamn" "URL för fil"> |
Syntaxen för att använda de första tre typerna av entitetsreferens är &entitetsnamn;. Syntaxen för att använda en parameterentitet är %entitetsnamn;. Parameterentitetsreferenser analyseras alltid och kan bara användas i en DTD.
Notationsdeklarationer
Notationsdeklarationer bör anges på ett av följande två sätt:
<!NOTATION notationsnamn SYSTEM "Extern identifierare">Den externa identifieraren bör vara namnet på ett program som kan behandla eller visa filer som denna notation använts på t ex:
<!NOTATION gif SYSTEM "Microsoft Internet Explorer">Observera att det är upp till programmet som behandlar XML att till URL skicka det program som indikerats av den externa identifieraren.
Behandla instruktioner
En behandlingsinstruktion består av texten mellan en <? och en ?>. Behandlingsinstruktioner läses enbart av XML-behandlare och får inte bestå av innehåll. Syntaxen för behandling av instruktioner är som följer:
<?målinstruktion?>Låt oss säga att du just har exporterat en XML-fil från avenue.quark och när du tittar på den i din textredigerare ser du ett gement "a" med en accent överallt där du trodde att du hade en varumärkessymbol. Faktum är att många av dina specialsymboler ser konstiga ut. Vad hände?
Det är mer än troligt att textredigeraren inte stöder den teckenkod som används av din XML-fil. Detta avsnitt förklarar detta i detalj.
Vad är en teckenkod?
En teckenkod är en specifikation som mappar en teckenuppsättning till motsvarande numeriska värden. ASCII-teckenkoden mappar t ex tecknet "M" till det numeriska värdet 77, "N" till 78, "O" till 79 osv.
Med hjälp av teckenkoden i en textfil kan ett program översätta textfilen till rätt tecken på skärmen. Utan teckenkoden är en textfil bara en serie med siffror. Om du visar en textfil med fel teckenkod kommer du troligtvis bara att se skräp, eftersom det program som öppnar filen kommer att mappa de numeriska värdena till fel teckenuppsättning.
Följande är teckenkoder:
Avenue.quark kan använda teckenkoderna UTF-8, UTF-16 och Shift-JIS.
Intervall med lägre och övre tecken
Du kan dela upp flertalet teckenkoder i två delar: de första 128 tecknen (det lägre intervallet), och alla tecken efter det (det övre intervallet).
Allmänt sett mappas det lägre intervallet för flertalet teckenkoder till samma tecken. Detta intervall inkluderar tecknen a-z, A-Z, 0-9, några skiljetecken, samt några speciella kontrolltecken.
Det är när du kommer till det övre intervallet som du stöter på problem. MacRoman och Windows Latin 1 har t ex lägre intervall som är nästan identiska. Därför gäller att om du tar en fil som bara använder tecken från detta intervall och överför den filen från Mac OS till Windows, ser det bra ut. Men om filen innehåller tecken från det övre intervallet kan du få konstiga resultat, eftersom många av värdena i det övre intervallet mappas till olika tecken beroende på plattform. Ett tecken som exempelvis visas som en varumärkessymbol i Mac OS kan visas som ett höjt gement A i Windows.
När du får sådana felaktiga teckenvisningar beror det antingen på att programmet som visar texten inte känner till teckenkoden för den texten eller på att programmet inte är kapabelt att visa texten med filens angivna teckenkod på rätt sätt.
Ange teckenkoder
Du kan indikera teckenkod för en XML-fil genom att inkludera en teckenkodspecifikation i filens XML-deklaration så här:
<?xml version="1.0" standalone="yes" encoding="Shift_JIS"?>Om en XML-fil inte innehåller en teckenkodsspecifikation förutsätter avenue.quark att filen använder teckenkoden UTF-8.
När du sparar en XML-fil från avenue.quark anger du dokumentets teckenkod med hjälp av popupmenyn Teckenkod och avenue.quark genererar automatiskt tillämpligt teckenkodsattribut.
Teckenkoder och DTDer
Med hjälp av XML kan du ange teckenkoden för en XML-fil, men det går inte att ange teckenkoden för en fristående DTD-fil.
Som tur är kan du göra det i avenue.quark. Om du vill ange teckenkoden för en fristående DTD lägger du bara till följande text som den första raden i filen:
<? xml encoding="teckenkodsnamn" ?>Om du t ex vill ange en fristående DTD som en UTF-16-DTD lägger du till följande rad i början av filen:
<? xml encoding="UTF-16" ?>